import {PropsWithChildren} from 'react'
import Taro, {useLaunch} from '@tarojs/taro'
import LocalData from "@/common/local_data";
import RouthPath from "@/common/RouthPath";
import Utils from "@/utils/common";
import LocalUtils from "@/utils/local_utils";
import LogUtils from "@/utils/log";
import './app.less'

function App({children}: PropsWithChildren<any>) {
  const checkLoginStatusAndNavigate = async (launchOptions?: Taro.getLaunchOptionsSync.LaunchOptions) => {
    const authToken = LocalUtils.getLocalStr(LocalData.token); // 假设你将 token 存储在 'authToken' 中
    if (Utils.isNotBlank(authToken)) {
      // 检查 token 是否有效（可以发送请求到后端验证）
      try {
        const isTokenValid = await verifyToken(authToken); // 调用验证 token 的函数
        if (isTokenValid) {
          // 如果 token 有效，跳转到当前页面
          let currentUrl = Utils.buildUrlFromLaunchOptions(launchOptions);
          if (currentUrl) {
            await Utils.reLaunch({
              url: currentUrl,
            });
          } else {
            await Utils.reLaunch({
              url: RouthPath.index,
            });
          }
          return; // 阻止继续执行跳转到登录页面的逻辑
        } else {
          // Token 无效或已过期，需要重新登录，可以清除本地存储的 token
          LocalUtils.removeLocalStorage(LocalData.token);
        }
      } catch (error) {
        console.error('验证 Token 失败', error);
        // 验证失败也当作未登录处理
        LocalUtils.removeLocalStorage(LocalData.token);
      }
    }
    // 如果没有 token 或 token 无效，则跳转到登录页面
    await Utils.reLaunch({
      url: RouthPath.loginPhone,
    });
  };

  // 模拟验证 Token 的后端请求 (你需要实现真正的后端验证)
  const verifyToken = async (token: string): Promise<boolean> => {
    // 这里应该调用你的后端 API 验证 token 的有效性
    // 示例：
    // try {
    //   const response = await Taro.request({
    //     url: 'your_backend_api/verify_token',
    //     method: 'POST',
    //     data: { token },
    //   });
    //   return response.data.isValid; // 假设后端返回 { isValid: true/false }
    // } catch (error) {
    //   console.error('Token 验证请求失败', error);
    //   return false;
    // }
    // 为了演示，这里简单返回 true，你需要替换成真实的逻辑
    return true;
  };
  useLaunch((options) => {
    checkLoginStatusAndNavigate(options).then(r => {
    });

    console.log('App launched.')
  })

  // children 是将要会渲染的页面
  return children
}


export default App
